package treeset;

import java.util.Comparator;
import java.util.TreeSet;
/**
 * 需求: 如果想对TreeSet中存入的Integer实现从大到小排序?
 *  由于Integer类是JDK提供的,别人写好的,我们无法修改其中的compareTo方法,也就是无法修改自然排序规则
 *  这时候我们就需要利用比较器Comparator进行排序
 * 比较器的使用:
 *   一般通过TreeSet的构造方法来使用比较器,一旦传入比较器,就不再按照自然排序规则比较
 *
 * compare方法决定了TreeSet中存入元素的顺序,简单原理如下:
 *    a.如果compare方法返回负数,说明新添加的元素比集合中的元素小, 存左边
 *    b.如果compare方法返回0, 说明新添加的元素与集合中的元素相同, 不存
 *    c.如果compare方法返回正数,说明新添加的元素比集合中的元素大, 存右边
 */
//class Sort implements Comparator<Integer>{
//
//    @Override
//    public int compare(Integer o1, Integer o2) {
//        //compare方法中定义比较规则
//        return o2 - o1;
//    }
//}
public class TreeSetDemo03 {
    public static void main(String[] args) {
        TreeSet<Integer> ts = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;//从大到小
            }
        });//匿名内部类写法,优点在于不用去创建一个子类对象来实现Comparator接口再去重写compare方法

        ts.add(5);
        ts.add(1);
        ts.add(7);
        ts.add(3);
        ts.add(5);

        System.out.println(ts);//[7, 5, 3, 1]
    }
}
